package medium;

import java.util.HashMap;
import java.util.Map;

/**
 * 2671. 频率跟踪器
 * 创建时间：2024-03-21 08:52
 * 地址：https://leetcode.cn/problems/frequency-tracker/description/?envType=daily-question&envId=2024-03-21
 */
public class 频率跟踪器_2671 {
    public static void main(String[] args) {
        FrequencyTracker f = new FrequencyTracker();
        f.add(1);
        f.deleteOne(1);
        f.hasFrequency(1);
    }
}

class FrequencyTracker {
    Map<Integer, Integer> map; // 记录出现次数
    Map<Integer, Integer> fre; // 记录频率
    public FrequencyTracker() {
        map = new HashMap<>();
        fre = new HashMap<>();
    }

    public void add(int number) {
        // 数字出现的次数
        int cnt = map.getOrDefault(number, 0);
        map.put(number, cnt + 1);
        // 增加后的频率 + 1
        fre.put(cnt + 1, fre.getOrDefault(cnt + 1, 0) + 1);
        // 增加后的频率 - 1
        if (fre.getOrDefault(cnt, 0) > 0) {
            fre.put(cnt, fre.get(cnt) - 1);
        }
    }

    public void deleteOne(int number) {
        // 数字出现的次数
        int cnt = map.getOrDefault(number, 0);
        if (cnt == 0) return;
        map.put(number, cnt - 1);
        // 减少前的频率 - 1
        fre.put(cnt, fre.get(cnt) - 1);
        // 减少后的频率 + 1
        if (cnt - 1 > 0) {
            fre.put(cnt - 1, fre.getOrDefault(cnt - 1, 0) + 1);
        }
    }

    public boolean hasFrequency(int frequency) {
        return fre.getOrDefault(frequency, 0) > 0;
    }
}
